/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package umis2.nivel;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *
 * @author djphilomath
 */
public class ProxySync {

    private Socket cliente;

    private static String IP = "127.0.0.1";
    private static int PORT = 2424;
    private ObjectInputStream leer;
    private ObjectOutputStream enviar;

    private String nombreJugador;


    /** Recibe el nivel del cual tomara la información para actualizar el Nivel global **/
    public void actualizar(Nivel nivel) {
        try {
            //        StringBuilder builder = new StringBuilder();
            //        for (Personaje p : nivel.getPersonajes()) {
            //            if (!(p instanceof Jugador)) continue;
            //            Jugador j = (Jugador)p;
            //            builder.append("-N:" + j.getNombre());
            //            builder.append("-X:" + j.getPosicion().getX());
            //            builder.append("-Y:" + j.getPosicion().getY());
            //            builder.append("\t");
            //        }
            //        builder.append("\n");
            System.out.println("Proxy - Actualizando");
            enviar.writeUTF(nombreJugador);
            enviar.writeObject(nivel);
            enviar.flush();
            System.out.println ("Proxy - Objetos enviados");
            if (leer.available() <= 0) Thread.sleep(50);
            System.out.println ("Proxy - Informacion disponible, leyendo..." + leer.available());
            Nivel nuevoNivel = (Nivel)leer.readObject();
            System.out.println ("Proxy - isNull: " + nuevoNivel);
            System.out.println ("Proxy - Objetos leidos");
            for (Personaje p : nuevoNivel.getPersonajes()) {
                if (!(p instanceof Jugador)) continue;
                Jugador j = (Jugador)p;
                for (Personaje q : nivel.getPersonajes()) {
                    if (!(q instanceof Personaje)) continue;
                    Jugador k = (Jugador) q;
                    if (!(k.getNombre().equals(j.getNombre()))) continue;
                    k.setPosicion(j.getPosicion());
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }


    

    public void conectar() {
        try {
            cliente = new Socket(ProxySync.IP, ProxySync.PORT);
            this.leer = new ObjectInputStream(cliente.getInputStream());
            enviar = new ObjectOutputStream(cliente.getOutputStream());
            while (leer.available() <= 0) Thread.sleep(100L);
            nombreJugador = leer.readUTF();
            System.out.println ("Soy el jugador " + nombreJugador);

            // Tiene que recibir el número de cliente

        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}
